﻿using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using equinoxWeb.Models;

namespace equinoxWeb.GestionConexion
{
    public class CuentaFunction
    {

        public static Usuario getUsuarioByUsername(string username)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select c.idcuenta,c.usuario,c.contrasenha,c.salt,u.idcliente from cuenta c,usuario u where c.idusuario=u.idusuario and c.usuario = @cuenta", con);
            cmd.Parameters.AddWithValue("@cuenta", username);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            Usuario u = null;
            if (res.Read())
            {
                u = new Usuario();
                u.IdUsuario = res.GetInt32("idcuenta");
                u.Cuenta = res.GetString("usuario");
                u.Contrasenha = res.GetString("contrasenha");
                u.Salt = res.GetString("salt");
                u.IdCliente = res.IsDBNull(4)?0:res.GetInt32(4);
            }
            res.Close();
            gestor.CloseConnection();
            return u;
        }

        public static string getNombreByUsername(string usuario)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select U.nombre, U.apellidoPat, U.apellidoMat  from cuenta C , usuario U where C.usuario = @cuenta and U.idusuario = C.idusuario", con);
            cmd.Parameters.AddWithValue("@cuenta", usuario);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            string nombreCompleto="";
            if (res.Read())
            {
                string nombre =res.IsDBNull(0)? "":res.GetString(0);
                string apellidoPat = res.IsDBNull(1)? "":res.GetString(1);
                nombreCompleto = nombre + " " + apellidoPat;
            }
            res.Close();
            gestor.CloseConnection();
            return nombreCompleto;
        }

        public static Usuario loginCorrecto(Usuario user)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select idcuenta,usuario,contrasenha,salt  from cuenta where usuario = @cuenta", con);
            cmd.Parameters.AddWithValue("@cuenta", user.Cuenta);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            Usuario u = null;
            if (res.Read())
            {
                u = new Usuario();
                u.IdUsuario = res.GetInt32("idcuenta");
                u.Cuenta = res.GetString("usuario");
                u.Contrasenha = res.GetString("contrasenha");
                u.Salt = res.GetString("salt");
            }
            res.Close();
            gestor.CloseConnection();
            return u;
        }

        public static bool existeUsuario(string cuenta)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select count(*)  from cuenta where usuario = @cuenta", con);
            cmd.Parameters.AddWithValue("@cuenta", cuenta);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            bool existe = false;
            if (res.Read() && res.GetInt32(0)!= 0)
            {

                existe = true;
            }
            res.Close();
            gestor.CloseConnection();
            return existe;
        }
        public static int getNextId()
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            int idUsuario = 0;
            MySqlCommand cmd;
            cmd = new MySqlCommand("select count(*)  from cuenta", con);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            while (res.Read()) 
            {
                idUsuario = res.GetInt32(0);
            }
            idUsuario++;
            res.Close();
            gestor.CloseConnection();
            return idUsuario;
        }
        public static void insertarUsuario(Usuario user)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("Insert into cuenta(idcuenta,idusuario,usuario,contrasenha,salt) values(" + "@idcuenta,@idcuenta, @cuenta , @contrasenha , @salt"
                + ")", con);
            cmd.Parameters.AddWithValue("@idcuenta", user.IdUsuario);
            cmd.Parameters.AddWithValue("@cuenta", user.Cuenta);
            cmd.Parameters.AddWithValue("@contrasenha", user.Contrasenha);
            cmd.Parameters.AddWithValue("@salt", user.Salt);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
        public static void insertarUsuario(Usuario user,MySqlConnection con)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlCommand cmd;
            cmd = new MySqlCommand("Insert into cuenta(idcuenta,idusuario,usuario,contrasenha,salt) values(" + "@idcuenta,@idcuenta, @cuenta , @contrasenha , @salt"
                + ")", con);
            cmd.Parameters.AddWithValue("@idcuenta", user.IdUsuario);
            cmd.Parameters.AddWithValue("@cuenta", user.Cuenta);
            cmd.Parameters.AddWithValue("@contrasenha", user.Contrasenha);
            cmd.Parameters.AddWithValue("@salt", user.Salt);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }

        public static void cambiarPassword(Usuario user)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("UPDATE cuenta SET contrasenha = @pass WHERE idcuenta = @id",con);
            cmd.Parameters.AddWithValue("@pass",user.Contrasenha);
            cmd.Parameters.AddWithValue("@id", user.IdUsuario);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
    }
}